package com.example.designpattern.ifelse;

import com.example.model.User;

import java.util.Objects;
import java.util.Optional;

/**
 * @author long
 * @date 2024/11/13 11:20
 */
public class ReplaceIfElseDemo {

    /**
     * 提前return 或者 三目运算符
     */
    private static Integer test1(int i){
        // 原逻辑
//        if(i==0){
//            return i+1;
//        }else{
//            return i;
//        }

        // 改造后 提前return

//        if(i==0){
//            return i+1;
//        }
//        return i;

        // 改造后 三目运算
        return i==0 ? i+1:i;
    }

    /**
     * Optional判空
     * @return
     */
    private static String test2(User user){
        // 原逻辑
//        if(user != null){
//            return "success";
//        }else{
//            return null;
//        }

        // 改造后
       return Optional.ofNullable(user).map(u-> "success").orElse(null);
    }

    /**
     * 枚举制优化
     * @param type
     * @return
     */
    private static String test3(Integer type){

        // 原逻辑
//        if(type == 1){
//            return "apple";
//        }else if(type == 2){
//            return "banana";
//        }else if(type == 3){
//            return "orange";
//        }else{
//            return null;
//        }

        // 改造后
        return FruitEnum.getDescByCode(type);

    }

    /**
     * 返回值相同时，判断条件合并
     * @param i
     * @return
     */
    private static boolean test4(int i){
        // 原逻辑
        if(i==0){
            return true;
        }
        if(i==1){
            return true;
        }
        return false;

        // 改造后
//        if(i==0 || i==1){
//            return true;
//        }
//        return false;
    }

    /**
     * 函数式编程
     * @param type
     * @param qty
     * @param basePrice
     * @return
     */
    private static double test5(String type,int qty,double basePrice){
        // 原逻辑
//        if("banana".equals(type)){
//            return qty * basePrice;
//        }else if("apple".equals(type)){
//            return qty * basePrice - 1;
//        }else if("orange".equals(type)){
//            return qty * basePrice + 1;
//        }
//        return 0.0;

        // 改造后
        FruitEnum fruitEnum = FruitEnum.getByDesc(type);
        return Optional.ofNullable(fruitEnum).map(e->e.getBiFunction().apply(qty,basePrice))
                .orElse(0.0);

        // 如果这个0.0的默认值需要计算，可以使用懒加载
//        return Optional.ofNullable(fruitEnum).map(e->e.getBiFunction().apply(qty,basePrice))
//                .orElseGet(ReplaceIfElseDemo::getDefaultValue);

    }

    private static Double getDefaultValue(){
        // do something

        return 0.0;
    }

}
